﻿<%@ Application Language="C#" %>

<script runat="server">

    void Application_Start(object sender, EventArgs e) 
    {
        // 在应用程序启动时运行的代码
      
    }
    
    void Application_End(object sender, EventArgs e) 
    {
        //  在应用程序关闭时运行的代码
      
    }
        
    void Application_Error(object sender, EventArgs e) 
    {
        Exception ex = Server.GetLastError().GetBaseException();

        string errorTime = "发生时间：" + DateTime.Now.ToString();
        string errorAddress = "发生异常页：" + Request.Url.ToString();
        string errorInfo = "异常信息：" + ex.Message;
        string errorSource = "错误源：" + ex.Source;
        string errorTrace = "堆栈信息：" + ex.StackTrace;
        Server.ClearError();

        System.IO.StreamWriter writer = null;
        try
        {
            lock (this)
            {
                //写入日志 
                string year = DateTime.Now.Year.ToString();
                string month = DateTime.Now.Month.ToString();
                string day = DateTime.Now.Day.ToString();
                string path = string.Empty;
                string filename = DateTime.Now.ToString("yyyyMMdd") + ".txt";
                path = Server.MapPath("~/Error/") + year + month + day;
                if (!System.IO.Directory.Exists(path))
                {
                    System.IO.Directory.CreateDirectory(path);
                }
                System.IO.FileInfo file = new System.IO.FileInfo(path + "/" + filename);

                writer = new System.IO.StreamWriter(file.FullName, true, Encoding.UTF8);//文件不在则创建，true表示追加
                writer.WriteLine("用户IP:" + Request.UserHostAddress);
                writer.WriteLine(errorTime);
                writer.WriteLine(errorAddress);
                writer.WriteLine(errorInfo);
                writer.WriteLine(errorSource);
                writer.WriteLine(errorTrace);
                writer.WriteLine("%-------------------------------------------------------%");

            }
        }
        finally
        {
            if (writer != null)
            {
                writer.Close();
            }
        }
        Server.Transfer("~/ErrorPage.html"); //跳转到显示友好错误的页面
    }

    void Session_Start(object sender, EventArgs e) 
    {
        // 在新会话启动时运行的代码

    }

    void Session_End(object sender, EventArgs e) 
    {
        // 在会话结束时运行的代码。 
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时，才会引发 Session_End 事件。如果会话模式设置为 StateServer 
        // 或 SQLServer，则不会引发该事件。

    }
       
</script>
